﻿using System;
using System.Collections.Generic;
//using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace Ticket
{
	public class Ticket
	{
		private string text = "";
       // private string Texto = "";
        private string parte1, parte2;
        private int maxCharacters, cortCharacters;
		private string printerName;
        private const int MAX_CHAR = 35;

		public Ticket(string printerName)
		{
			this.printerName = printerName;
		}

        public void LineasGuion()
        {
            text = "----------------------------------------\n";   // agrega lineas separadoras -
            RawPrinterHelper.SendStringToPrinter(printerName, text); // imprime linea
        }
        public void LineasAsterisco()
        {
            text = "****************************************\n";   // agrega lineas separadoras *
            RawPrinterHelper.SendStringToPrinter(printerName, text); // imprime linea
        }
        public void LineasIgual()
        {
            text = "========================================\n";   // agrega lineas separadoras =
            RawPrinterHelper.SendStringToPrinter(printerName, text); // imprime linea
        }
        public void LineasTotales()
        {
            text = "                             -----------\n"; ;   // agrega lineas de total
            RawPrinterHelper.SendStringToPrinter(printerName, text); // imprime linea
        }
        public void EncabezadoVenta(int Folio)
        {
            text = "FOLIO   : " + Folio +"\n\n";   // agrega lineas de  encabezados
            RawPrinterHelper.SendStringToPrinter(printerName, text); // imprime texto
        }
        public void TextoIzquierda(string par1)                          // agrega texto a la izquierda
        {
            maxCharacters = par1.Length;
            if (maxCharacters > MAX_CHAR)                                 // **********
            {
                cortCharacters = maxCharacters - MAX_CHAR;
                parte1 = par1.Remove(MAX_CHAR, cortCharacters);        // si es mayor que 40 caracteres, lo corta
            }
            else { parte1 = par1; }                      // **********
            text = parte1 + "\n";
            RawPrinterHelper.SendStringToPrinter(printerName, text); // imprime texto
        }
        public void TextoDerecha(string par1)
        {
            text = "";
            maxCharacters = par1.Length;
            if (maxCharacters > MAX_CHAR)                                 // **********
            {
                cortCharacters = maxCharacters - MAX_CHAR;
                parte1 = par1.Remove(MAX_CHAR, cortCharacters);           // si es mayor que 40 caracteres, lo corta
            }
            else { parte1 = par1; }                      // **********
            maxCharacters = MAX_CHAR - par1.Length;                     // obtiene la cantidad de espacios para llegar a 40
            for (int i = 0; i < maxCharacters; i++)
            {
                text += " ";                          // agrega espacios para alinear a la derecha
            }
            text += parte1 + "\n";                    //Agrega el texto
            RawPrinterHelper.SendStringToPrinter(printerName, text); // imprime texto
        }
        public void TextoCentro(string par1)
        {
            text = "";
            maxCharacters = par1.Length;
            if (maxCharacters > MAX_CHAR)                                 // **********
            {
                cortCharacters = maxCharacters - MAX_CHAR;
                parte1 = par1.Remove(MAX_CHAR, cortCharacters);          // si es mayor que 40 caracteres, lo corta
            }
            else { parte1 = par1; }                      // **********
            maxCharacters = (int)(MAX_CHAR - parte1.Length) / 2;         // saca la cantidad de espacios libres y divide entre dos
            for (int i = 0; i < maxCharacters; i++)                // **********
            {
                text += " ";                           // Agrega espacios antes del texto a centrar
            }                                            // **********
            text += parte1 + "\n";
            RawPrinterHelper.SendStringToPrinter(printerName, text); // imprime texto
        }
        public void TextoExtremos(string par1, string par2)
        {
            maxCharacters = par1.Length;
            if (maxCharacters > 18)                                 // **********
            {
                cortCharacters = maxCharacters - 18;
                parte1 = par1.Remove(18, cortCharacters);          // si par1 es mayor que 18 lo corta
            }
            else { parte1 = par1; }                      // **********
            text = parte1;                             // agrega el primer parametro
            maxCharacters = par2.Length;
            if (maxCharacters > 18)                                 // **********
            {
                cortCharacters = maxCharacters - 18;
                parte2 = par2.Remove(18, cortCharacters);          // si par2 es mayor que 18 lo corta
            }
            else { parte2 = par2; }
            maxCharacters = MAX_CHAR - (parte1.Length + parte2.Length);
            for (int i = 0; i < maxCharacters; i++)                 // **********
            {
                text += " ";                            // Agrega espacios para poner par2 al final
            }                                             // **********
            text += parte2 + "\n";                     // agrega el segundo parametro al final
            RawPrinterHelper.SendStringToPrinter(printerName, text); // imprime texto
        }
        public void AgregaTotales(float Subtotal, float IVA, float Total)
        {
            string Texto = "";
            
            Texto =    "         SUB-TOTAL             :  " + Subtotal.ToString();
            Texto += "\n         I.V.A                :  " + IVA.ToString();
            Texto += "\n         TOTAL A PAGAR        :  " + Total.ToString()+ "\n";

            RawPrinterHelper.SendStringToPrinter(printerName, Texto); // imprime texto
            //maxCharacters = par1.Length;
            //if (maxCharacters > 25)                                 // **********
            //{
            //    cortCharacters = maxCharacters - 25;
            //    parte1 = par1.Remove(25, cortCharacters);          // si es mayor que 25 lo corta
            //}
            //else { parte1 = par1; }                      // **********
            //text = parte1;
            //parte2 = total.ToString("c");
            //maxCharacters = MAX_CHAR - (parte1.Length + parte2.Length);
            //for (int i = 0; i < maxCharacters; i++)                // **********
            //{
            //    text += " ";                           // Agrega espacios para poner el valor de moneda al final
            //}                                            // **********
            //text += parte2 + "\n";
          //  RawPrinterHelper.SendStringToPrinter(printerName, text); // imprime texto
        }
        public void AgregaArticulo(float Alimentos, float Bebidas, float Extras)
        {
            string Texto = "";
            
            Texto =    " ALIMENTOS                   :  " + Alimentos.ToString();
            Texto += "\n BEBIDAS                     :  " + Bebidas.ToString();
            Texto += "\n EXTRAS                      :  " + Extras.ToString() + "\n\n";
           
            RawPrinterHelper.SendStringToPrinter(printerName, Texto); // imprime texto
            
            //if (cant.ToString().Length <= 3 && precio.ToString("c").Length <= 10 && total.ToString("c").Length <= 11) // valida que cant precio y total esten dentro de rango
            //{
                //maxCharacters = par1.Length;
                //if (maxCharacters > 16)                                 // **********
                //{
                //    cortCharacters = maxCharacters - 16;
                //    parte1 = par1.Remove(16, cortCharacters);          // corta a 16 la descripcion del articulo
                //}
                //else { parte1 = par1; }                      // **********
                //text = parte1;                             // agrega articulo
                //maxCharacters = (3 - cant.ToString().Length) + (16 - parte1.Length);
                //for (int i = 0; i < maxCharacters; i++)                // **********
                //{
                //    text += " ";                           // Agrega espacios para poner el valor de cantidad
                //}
                //text += cant.ToString();                   // agrega cantidad
                //maxCharacters = 10 - (precio.ToString("c").Length);
                //for (int i = 0; i < maxCharacters; i++)                // **********
                //{
                //    text += " ";                           // Agrega espacios
                //}                                            // **********
                //text += precio.ToString("c"); // agrega precio
                //maxCharacters = 11 - (total.ToString().Length);
                //for (int i = 0; i < maxCharacters; i++)                // **********
                //{
                //    text += " ";                           // Agrega espacios
                //}                                            // **********
                //text += total.ToString("c") + "\n"; // agrega precio
               // RawPrinterHelper.SendStringToPrinter(printerName, text); // imprime texto
            //}
            //else
            //{
            //    MessageBox.Show("Valores fuera de rango");
            //    RawPrinterHelper.SendStringToPrinter(printerName, "Error, valor fuera de rango\n"); // imprime texto
            //}
        }
        public void CortaTicket()
        {
            string corte = "\x1B" + "m";                  // caracteres de corte
            string avance = "\x1B" + "d" + "\x09";        // avanza 9 renglones
            RawPrinterHelper.SendStringToPrinter(printerName, avance); // avanza
            RawPrinterHelper.SendStringToPrinter(printerName, corte); // corta
        }
        public void AbreCajon(byte number)
        {
			string cajon = "\x1B" + "p" + "\x0" + number + "\x0F" + "\x96";  // caracteres de apertura cajon 
            RawPrinterHelper.SendStringToPrinter(printerName, cajon); // abre cajon
        }
    }
	}


